home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Programming / LEDA / source / src / graph_alg / _d.c < prev    next >
Encoding:
Text File  |  1994-11-16  |  1.4 KB  |  66 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  _d.c
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15.  
  16. void DIJKSTRA(graph& G, node s, 
  17.               edge_array<int>&  cost, 
  18.               node_array<int>&  dist,
  19.               node_array<edge>& pred,
  20.               priority_queue<node,int>&   PQ)
  21. {
  22.   node_array<pq_item> I(G);
  23.   node v;
  24.                                                                                
  25.   forall_nodes(v,G)
  26.   { pred[v] = nil;
  27.     dist[v] = MAXINT;
  28.    }
  29.  
  30.   dist[s] = 0;
  31.   I[s] = PQ.insert(s,0);
  32.  
  33.   while (! PQ.empty())
  34.   { pq_item it = PQ.find_min();
  35.     node u = PQ.key(it);
  36.     int du = dist[u];
  37.     edge e;
  38.     forall_adj_edges(e,u)
  39.     { v = G.target(e);
  40.       int c = du + cost[e];
  41.       if (c < dist[v])
  42.       { if (dist[v] == MAXINT)
  43.           I[v] = PQ.insert(v,c);
  44.         else
  45.           PQ.decrease_inf(I[v],c);
  46.         dist[v] = c;
  47.         pred[v] = e;
  48.        }                                                                 
  49.      }
  50.     PQ.del_item(it);
  51.    }
  52. }
  53.  
  54.  
  55. void DIJKSTRA(graph& G, node s, 
  56.               edge_array<int>&  cost, 
  57.               node_array<int>&  dist,
  58.               node_array<edge>& pred)
  59. {
  60.   priority_queue<node,int>  PQ;
  61.  
  62.   DIJKSTRA(G,s,cost,dist,pred,PQ);
  63.  
  64.  }
  65.